package com.ll.custom;

/**
 * @author 刘龙
 * @version 1.0
 */
public class CustomInterfaceGeneric {
    public static void main(String[] args) {

    }
}

interface IUsb<U,R> {

    /**
     * 普通方法, 可以使用接口泛型
     * @param r
     * @return
     */
    U get(R r);

    void hi(R r);

    void run(R r1, R r2, R r3);

    /**
     * 在jdk8, 可以在接口中, 使用默认方法
     * @param u
     * @return
     */
    default R method(U u) {
        return null;
    }
}


/**
 * 在继承接口时指定泛型接口的类型
 */
interface IA extends IUsb<String, Double>{}

class IB implements IA{

    @Override
    public String get(Double aDouble) {
        return null;
    }

    @Override
    public void hi(Double aDouble) {

    }

    @Override
    public void run(Double r1, Double r2, Double r3) {

    }
}

/**
 * interface IUsb<U,R> {}
 * 实现接口直接指定泛型接口类型, 不指定默认Object
 */
class BB implements IUsb{
    @Override
    public Object get(Object o) {
        return null;
    }

    @Override
    public void hi(Object o) {

    }

    @Override
    public void run(Object r1, Object r2, Object r3) {

    }
}

/**
 * interface IUsb<U,R> {}
 * 实现接口直接指定泛型接口类型
 */
class CC implements IUsb<String, Integer>{
    @Override
    public String get(Integer integer) {
        return null;
    }

    @Override
    public void hi(Integer integer) {

    }

    @Override
    public void run(Integer r1, Integer r2, Integer r3) {

    }
}

